﻿
using EntGuayasSLA.BL;
using Ext.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using EntGuayasSLA.BL.Licenciamiento;
using System.Configuration;

namespace EGuayas.Web
{
    public partial class Principal : pgBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                    if (!X.IsAjaxRequest)
                    {
            
                        #region ItemsMenu

                        var listaAccesosUsuario = FuncionalidadLista.GetFuncionalidadLista(GetSessionUsuario.UsuarioId,
                                                                                           GetSessionUsuario.UsuarioRolId);
                        var menus=listaAccesosUsuario.GroupBy(lau => lau.MenuId);
                        var listaMenus = new List<Menu>();
             
                        foreach (IGrouping<string,FuncionalidadInfo> menu in menus)
                        {
                            var m = new Menu();
                            m.Id = menu.Key;
                            m.Items=new List<MenuItem>();
                            foreach (var funcionalidadInfo in menu)
                            {
                                m.TituloMenu = funcionalidadInfo.NombreMenu;
                                var im = new MenuItem();
                                im.Id = funcionalidadInfo.ItemMenuId;
                                im.TituloMenu = funcionalidadInfo.NombreItemMenu;
                                im.Url = funcionalidadInfo.Url;
                                m.Items.Add(im);
                            }
                            listaMenus.Add(m);
                        }
                        /*var listaMenus = new List<Menu>() { 
                            new Menu()
                            {
                                Id="20",
                                TituloMenu = "Revisión de Documentación",
                                Icono = Icon.TableEdit,
                                Items = new List<MenuItem>()
                                {
                                    new MenuItem()
                                    {
                                        Id="201",
                                        TituloMenu="Revisar",
                                        Url = "EGlobal/pgRevisar.aspx"
                                    }
                                }
                            },new Menu()
                            {
                                Id="10",
                                TituloMenu = "Dirección",
                                Icono = Icon.PackageSe,
                                Items = new List<MenuItem>()
                                {
                                    new MenuItem()
                                    {
                                        Id="101",
                                        TituloMenu="Firma",
                                        Url = "Licenciamiento/dma/pgFirma.aspx"
                                    }
                                }
                            },new Menu()
                            {
                                Id="0",
                                TituloMenu = "Licenciamiento",
                                Icono = Icon.UserBrown,
                                Items = new List<MenuItem>()
                                {
                                    new MenuItem()
                                    {
                                        Id="01",
                                        TituloMenu="Procesos de Licenciamiento",
                                        Url = "Licenciamiento/promotor/pgAdmLicencias.aspx"
                                    },
                                    new MenuItem()
                                    {
                                        Id="02",
                                        TituloMenu="Nuevo expediente",
                                        Url = "Expedientes/pgNuevoExpediente.aspx"
                                    },
                                     new MenuItem()
                                    {
                                        Id="03",
                                        TituloMenu="Administrar expediente",
                                        Url = "Expedientes/pgAdmExpediente.aspx"
                                    }
                           

                                }
                            },
                            new Menu()
                            {
                                Id="1",
                                TituloMenu = "Licenciamiento",
                                Icono = Icon.FolderUp,
                                Items = new List<MenuItem>()
                                {
                                    new MenuItem()
                                    {
                                        Id="11",
                                        TituloMenu="Administrar Expedientes",
                                        Url = "Expedientes/pgAdmExpedientes.aspx"
                                    },
                                    new MenuItem()
                                    {
                                        Id="12",
                                        TituloMenu="Procesos de Licenciamiento",
                                        Url = "Licenciamiento/admin/pgAdmLicencias.aspx"
                                    }
                                }
                            },
                            new Menu()
                            {
                                Id="2",
                                TituloMenu = "Expedientes Auditoria",
                                Icono = Icon.TableEdit,
                                Items = new List<MenuItem>()
                                {
                          
                                    new MenuItem()
                                    {
                                        Id="21",
                                        TituloMenu="Internos",
                                        Url = "Auditoria/expedientes/pgInternos.aspx"
                                    },
                                    new MenuItem()
                                    {
                                        Id="22",
                                        TituloMenu="Externo",
                                        Url = "Auditoria/expedientes/pgExternos.aspx"
                                    },
                           
                                }
                            },
                  
                            new Menu()
                            {
                                Id="3",
                                TituloMenu = "Seguimiento",
                                Icono = Icon.ComputerEdit,
                                Items = new List<MenuItem>()
                                {
                                    new MenuItem()
                                    {
                                        Id="31",
                                        TituloMenu="Auditoria de Cumplimiento",
                                        Url = "Auditoria/admin/Cumplimiento/pgAdmAC.aspx"
                                    },
                                    new MenuItem()
                                    {
                                        Id="32",
                                        TituloMenu="Cunplimiento del PMA",
                                        Url = "Auditoria/admin/PMA/pgAdmAPMA.aspx"
                                    },
                                    new MenuItem()
                                    {
                                        Id="33",
                                        TituloMenu="Monitoreo",
                                        Url = "Auditoria/admin/Monitoreo/pgAdmAM.aspx"
                                    }
                            
                                }
                            },
                             new Menu()
                            {
                                Id="5",
                                TituloMenu = "Seguimiento-Promotor",
                                Icono = Icon.ComputerEdit,
                                Items = new List<MenuItem>()
                                {
                                    new MenuItem()
                                    {
                                        Id="51",
                                        TituloMenu="Auditoria de Cumplimiento",
                                        Url = "Auditoria/promotor/Cumplimiento/pgContentCumpPro.aspx"
                                    },
                                    new MenuItem()
                                    {
                                        Id="52",
                                        TituloMenu="Cunplimiento del PMA",
                                        Url = "Auditoria/promotor/PMA/pgPMA.aspx"
                                    },
                                    new MenuItem()
                                    {
                                        Id="53",
                                        TituloMenu="Monitoreo",
                                        Url = "Auditoria/promotor/Monitoreo/pgMonitoreo.aspx"
                                    }
                                }
                            },
                            new Menu()
                            {
                                Id="4",
                                TituloMenu = "Usuarios",
                                Icono = Icon.GroupEdit,
                                Items = new List<MenuItem>()
                                {
                                    new MenuItem()
                                    {
                                        Id="41",
                                        TituloMenu="Administración de usuarios",
                                        Url = "Usuario/pgAdminUsuarios.aspx"
                                    },
                                    new MenuItem()
                                    {
                                        Id="42",
                                        TituloMenu="Activar promotores",
                                        Url = "Usuario/pgActivarUsuarios.aspx"
                                    }
                                }
                            }
                        };*/
                        #endregion             
                        CrearMenu(listaMenus);
                        AlertaLista listaAlerta = SetSessionLog("LongBegin");
                        this.ResourceManager1.RegisterIcon(Icon.Information);
                        this.ResourceManager1.AddScript("{0}.startTask('longaction');", this.TaskManager1.ClientID);
                        this.lblUser.Html = String.Format("<b>Bienvenido [ <i>{0}</i> ] {1} </b>", GetSessionUsuario.UsuarioRol, GetSessionUsuario.UsuarioRolNombre);
                        if (GetSessionUsuario.UsuarioRolCodigo == Valores.Codigo_Rol_Director )
                        {
                             Persona objPersona = Persona.GetEditableRoot(Guid.Parse(GetSessionUsuario.PersonaId));
                             if (objPersona.Certificado == Valores.Codigo_CHAR_No)
                             {
                                 Window winNoDoc = new Window()
                                 {
                                     ID = "winDocUpCer",
                                     Hidden = false,
                                     Height = Unit.Pixel(450),
                                     Width = Unit.Pixel(420),
                                     ButtonAlign = Alignment.Center,
                                     Closable = false,
                                     Title="Certificado para firma de documentos",
                                     Loader = new ComponentLoader
                                     {
                                         Mode = LoadMode.Frame,
                                         Url = ConfigurationManager.AppSettings.Get("Url") + "Licenciamiento/dma/pgCerUpload.aspx",
                                         LoadMask =
                                         {
                                             ShowMask = true
                                         }
                                     }
                                 };
                                 Ext.Net.Button btnApply = new Ext.Net.Button();
                                 btnApply.Text = "Cerrar";
                                 btnApply.Hide();
                                 btnApply.ID   = "btnCloseFirmarDoc";
                                 btnApply.OnClientClick = "#{winDocUpCer}.close();";
                                 winNoDoc.Buttons.Add(btnApply);

                                 this.Controls.Add(winNoDoc);
                               
                         
                             }

                        }
                    }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
               
        }
        void CrearMenu(List<Menu> menus)
        {
            try
            {
                    foreach (var menu in menus)
                    {
                        TreePanel tree = new TreePanel();
                        tree.Icon = menu.Icono;
                        tree.Title = menu.TituloMenu;
                        tree.RootVisible = false;
              
                        Ext.Net.Node root = new Ext.Net.Node();
                        root.NodeID = menu.Id;
                        root.Expandable = false;
                        tree.Root.Add(root);
                        foreach (var itemMenu in menu.Items)
                        {
                            Ext.Net.Node nodo = new Ext.Net.Node();                    
                            nodo.NodeID = itemMenu.Id;
                            nodo.Text = itemMenu.TituloMenu;
                            nodo.HrefTarget = itemMenu.Url;
                            nodo.Expandable = false;
                            nodo.Leaf = true;
                            root.Children.Add(nodo);
                    
                        }
                        tree.Listeners.ItemClick.Handler = "clickItem(item,record,node,index,e);";
                
                        panMenu.Items.Add(tree);

                    }
         

                    //tree.Root.Add(root);

                    //Ext.Net.Node node1 = new Ext.Net.Node();

                    //node1.Text = "Friends";
                    //node1.Expanded = true;

                    //node1.Children.Add(new Ext.Net.Node()
                    //{
                    //    Text = "Jack",
                    //    Icon = Icon.User,
                    //    Leaf = true
                    //});
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }

            
        }
        [DirectMethod(ShowMask = true)]
        public Boolean DeleteSession()
        {
            try
            {
                   this.ResourceManager1.AddScript("{0}.stopTask('longaction');", this.TaskManager1.ClientID);
                   Session.Clear();
                   Session.Abandon();
                
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
           return (true);
        }
        protected void FeedInfoAdded(object sender, ComponentAddedEventArgs e)
        {

            try
            {
                if (X.IsAjaxRequest)
                {
                    return;
                }

                TabPanel tab = (TabPanel)e.Control;
                tab.Region = Region.Center;
                tab.MinWidth = 300;
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        protected void Refresh(object sender, DirectEventArgs e)
        {
            try
            {
                if (this.Session["LongAction"] != null)
                {
                    var begin = 0;

                    AlertaLista listaAlerta = SetSessionLog("LongAction");
                    int progress = (int) this.Session["LongAction"];
                    try
                    {
                        begin = (int) this.Session["LongBegin"];
                    }
                    catch
                    {
                        this.Session["LongBegin"] = progress;

                    }

                    if ((begin != progress & progress != 0) | (begin == 1 & progress == 1))
                    {
                        AlertasInfo NotificacionFirst = listaAlerta.FirstOrDefault();
                        String NotificacionTitulo = String.Format("{0} Notificaciones Nuevas", progress);
                        Notification.Show(new NotificationConfig
                            {
                                Title = NotificacionTitulo,
                                Icon = Icon.Information,
                                AutoHide = false,
                                Html =
                                    String.Format("<b>{0}</b><br><p>{1}</p>", NotificacionFirst.Asunto,
                                                  NotificacionFirst.Mensaje),
                                Pinned = true,
                                Resizable = true,
                                BodyStyle = "padding:10px",
                                ShowFx = new SlideIn {Anchor = AnchorPoint.Right},
                                HideFx = new SlideOut {Anchor = AnchorPoint.Right},
                                CloseVisible = true

                            });
                        this.Session["LongBegin"] = progress;
                        X.Js.Call("gridAlertaReload", "E");
                    }
                }
                else
                {
                    this.ResourceManager1.AddScript("{0}.stopTask('longaction');", this.TaskManager1.ClientID);
                }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);

            }

        }

        private AlertaLista SetSessionLog(string idSession)
        {
            try
            {
                AlertaCriteriaSingleCriteria filter = AlertaCriteriaSingleCriteria.NewAlertaSingleCriteria();
                filter.Estado = "E";
                filter.FechaConfigura = DateTime.Now;
                filter.RemiteId = GetSessionUsuario.PersonaId;
                filter.Visualiza = "S";
                filter.CodigoRol = GetSessionUsuario.UsuarioRolCodigo;
                AlertaLista listaAlerta = AlertaLista.GetAlertaLista(filter);
                this.Session[idSession] = listaAlerta.Count();
                return listaAlerta;
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
            return null;
        }
      

    }
    public class Menu 
    {
        public string Id { get; set; }
        public string TituloMenu { get; set; }
        public List<MenuItem> Items { get; set; }
        public Icon Icono { get; set; }
       
    }
    public class MenuItem
    {
        public string Id { get; set; }
        public string TituloMenu { get; set; }
        public string Url { get; set; }
      
    }
}